package stage
{
	
	import engine.TileLayer;
	import engine.Wall;
	
	import flash.events.Event;
	import flash.net.*;
	import flash.utils.ByteArray;
	import flash.utils.Dictionary;
	
	import loaders.URLResCacher;
	
	import mx.core.UIComponent;
	
	/**
	 * 1 操作方面：按住鼠标后放掉后继续跟随鼠标，这个需要实现。 
	 * 2 处理几个层级
	 * 3 处理丢弃物品操作
	 * 4 居中方式还是做2种，缓动和一直居中。
	 * @author Ryan
	 * 
	 */	
	public class GameStage extends UIComponent
	{
		public static var instance :GameStage;
		private var _tileLayer:TileLayer;

		private var _wallLoader:URLResCacher;
		private var _loader:URLLoader;
		
		public var mapId:int = 0;
		public var mapX:int = 0;
		public var mapY:int = 0;
		
		/**
		 * 隐形墙 
		 */		
		private var _wall:Wall;
		
		public function GameStage()
		{
			// 指向最后实例化的对象。
			instance = this;
			_wallLoader = new URLResCacher();
			_loader = new URLLoader();
			_wall = new Wall();
			
			_wallLoader.onLoaded = onMapInfo;
			
			// 初始化显示层级
			//TODO
			_initLayer();
			// 初始化监听器
			//initListeners();
			// 初始化缓动处理对象
		}
		
		private function _initLayer():void
		{
			_tileLayer = new TileLayer();
			this.addChild( _tileLayer );
		}
		
		public function preLoad():void
		{
			_wallLoader.load( "scene/scene_" + mapId.toString() + "/wall.dat", true );
			_loader.load(new URLRequest("scene/scene_" + mapId.toString() + "/mini.jpg"));
		}
		
		public function enterMap():void
		{
			_wallLoader.load( "scene/scene_" + mapId.toString() + "/wall.dat" );
		}
		/**
		 * 底图数据已返回
		 * 加载Tile等 
		 * @param e
		 * 
		 */		
		private function onMapInfo( data:ByteArray ):void
		{
			var _wallData:ByteArray = new ByteArray();
			data.position = 0;
			data.readBytes(_wallData, 0, data.length);
			_wall.setData( _wallData );
			
			// 加载tile
			//var mapInfo:Object = TemplateReader.getTemplateById("Map",Player.instance.data.scene);
			_tileLayer.setMap( mapId , mapX, mapY,_wall.mapWidth,_wall.mapHeight, "scene/scene_"+mapId.toString()+"/" );
			
			//centerStage()
			
			//dispatchEvent(new StageEvent(StageEvent.STAGE_CHANGE, Player.instance.x, Player.instance.y));
			
			// 加载非交互遮蔽物
//			if(_wall.itemList)
//			{
//				for(var i:int=0; i<_wall.itemList.length; i++)
//				{
//					var mUrl:String = UserData.resUrl + "scene/" + mapInfo.res + _wall.itemList[i].url;
//					var masker:Masker = new Masker(mUrl,_wall.itemList[i].width,_wall.itemList[i].height);
//					masker.x = _wall.itemList[i].x;
//					masker.y = _wall.itemList[i].y;
//					masker.alpha = 0.6;
//					_stageUnits.addMasker(masker, i);
//					_unitLayer.addElement(masker);
//					trace("Masker",mUrl);
//				}
//			}
			// 居中
//			_stageMove.centerTo(Player.instance.data.xpos,Player.instance.data.ypos);
//			
//			addTransport();
//			
//			GameEventDispatcher.instance.dispatchEvent(GameEvent.SCENE_CHANGED, null);
//			
//			if ( mapInfo.aLevel == "2" )
//			{
//				RouteService.maxTryValue = 18000;
//			}
//			else
//			{
//				RouteService.maxTryValue = 6000;
//			}
//			
//			PlayerMove.instance.continueMoving();
//			
//			// 关闭所有面板
//			var except:Dictionary = new Dictionary;
			
			// 强制GC
			//SystemUtil.gc();
		}
		
	}
}
